home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 2: Applications / Linux Cubed Series 2 - Applications.iso / editors / emacs / xemacs / xemacs-1.006 / xemacs-1 / lib / xemacs-19.13 / info / hyperbole.info-1 < prev    next >
Encoding:
GNU Info File  |  1995-09-01  |  47.2 KB  |  1,154 lines

  1. This is Info file ../info/hyperbole.info, produced by Makeinfo-1.63
  2. from the input file hyperbole.texi.
  3.  
  4. 
  5. File: hyperbole.info,  Node: Top,  Next: Introduction,  Prev: (dir),  Up: (dir)
  6.  
  7. Preface
  8. *******
  9.  
  10. Copyright (C) 1991-1995  Free Software Foundation, Inc.
  11.  
  12.    All trademarks referenced herein are trademarks of their respective
  13. holders.
  14.  
  15.    This edition of the Hyperbole User Manual is for use with any version
  16. 3.19.07 or greater of Hyperbole.  Hyperbole is available for free use,
  17. distribution, and modification under the terms of version 2 or later of
  18. the GNU Public License (GPL).  No representations are made about the
  19. suitability of this software for any purpose.  It is provided "as is"
  20. without express or implied warranty.
  21.  
  22.    Hyperbole was designed and written by Bob Weiner.  Motorola, Inc.
  23. funded and donated this work for free redistribution as part of the
  24. InfoDock integrated productivity toolset.  Hyperbole and InfoDock can be
  25. obtained via anonymous ftp on the Internet from:
  26. `/anonymous@cs.uiuc.edu:/pub/xemacs/infodock'.
  27.  
  28.    This manual explains user operation and summarizes basic developer
  29. facilities of Hyperbole.  This major release of Hyperbole concentrates
  30. on providing convenient access to information and control over its
  31. display.  The next major release, version 4, will emphasize flexible
  32. views and structure manipulation within bodies of information.
  33. (Structure manipulation (outlining) is included within this release but
  34. a number of useful functions and additional documentation remain to be
  35. written.)
  36.  
  37.    Hyperbole is an open, efficient, programmable information management
  38. and hypertext system.  It is intended for everyday work on any UNIX
  39. platform supported by GNU Emacs.  It works well with the versions of
  40. Emacs that support multiple X or NEXTSTEP windows: Emacs 19, XEmacs
  41. (formerly called Lucid Emacs) and Epoch.  Hyperbole allows hypertext
  42. buttons to be embedded within unstructured and structured files, mail
  43. messages and news articles.  It offers intuitive mouse-based control of
  44. information display within multiple windows.  It also provides
  45. point-and-click access to Info manuals, ftp archives, Wide-Area
  46. Information Servers (WAIS), and the World-Wide Web (WWW) hypertext
  47. system through encapsulations of software that support these protocols.
  48.  
  49. Hyperbole consists of four parts:
  50.  
  51.   1. an interactive information management interface, including a
  52.      powerful rolodex, which anyone can use.  It is easy to pick up and
  53.      use since it introduces only a few new mechanisms and provides
  54.      user-level facilities through a menu interface, which you control
  55.      from the keyboard or the mouse;
  56.  
  57.   2. an outliner with multi-level autonumbering and permanent ids
  58.      attached to each outline node for use as hypertext link anchors;
  59.  
  60.   3. a set of hyper-button types that provides core hypertext and other
  61.      behaviors.   Users can make simple changes to button types and
  62.      those familiar with Emacs Lisp can quickly prototype and deliver
  63.      new types;
  64.  
  65.   4. a set of programming library classes for system developers who
  66.      want to integrate Hyperbole with another user interface or as a
  67.      back-end to a distinct system.  (All of Hyperbole is written in
  68.      Emacs Lisp for ease of modification.  Although Hyperbole was
  69.      initially designed as a prototype, it has been engineered for
  70.      real-world usage and is well structured.)
  71.  
  72.    Hyperbole may be used simply for browsing through documents
  73. pre-configured with Hyperbole buttons, in which case, one can safely
  74. ignore most of the information in this manual.  The `DEMO' file
  75. included in the Hyperbole distribution demonstrates many of Hyperbole's
  76. standard facilities.  It offers a much less technical introduction for
  77. Hyperbole users by providing good examples of how buttons may be used
  78. and an introduction to the outliner.
  79.  
  80.    So if this manual is too detailed for your taste, you can skip it
  81. entirely and just jump right into the demonstration, normally by typing
  82. {`C-h h d d'}, assuming Hyperbole has already been installed at your
  83. site.  Otherwise, *note Initializing::., for Hyperbole installation and
  84. initialization information.
  85.  
  86.    Many users, however, will want to do more than browse with Hyperbole,
  87. e.g.  create their own buttons.  The standard Hyperbole button editing
  88. user interface is GNU Emacs-based, so a basic familiarity with the Emacs
  89. editing model is useful.  The material covered in the GNU Emacs
  90. tutorial, normally bound to {`C-h t'} within Emacs, is more than
  91. sufficient as background.  If some GNU Emacs terms are unfamiliar to
  92. you, *note Emacs Glossary: (emacs)Glossary..
  93.  
  94.    Before we delve into Hyperbole, a number of acknowledgments are in
  95. order.  Peter Wegner has encouraged the growth in this work.  Morris
  96. Moore has helped me pursue my own research visions and keeps me striving
  97. for excellence.  Doug Engelbart has shown me the bigger picture and
  98. continues to be an inspiration.  His work provides a model from which I
  99. am beginning to draw.  Kellie Clark and I jointly designed and
  100. implemented the Hyperbole outliner.
  101.  
  102. * Menu:
  103.  
  104. * Introduction::
  105. * Button Concepts::
  106. * Hyperbole Views::
  107. * Using Hyperbole::
  108. * Developing with Hyperbole::
  109. * Glossary::
  110. * Smart Key Reference::
  111. * Outliner Keys::
  112. * Suggestion or Bug Reporting::
  113. * Questions and Answers::
  114. * Ongoing Work::
  115. * References::
  116. * Key Binding Index::
  117. * Code and File Index::
  118. * Concept Index::
  119.  
  120.  -- The Detailed Node Listing --
  121.  
  122. Introduction
  123.  
  124. * Hyperbole Overview::
  125. * Manual Overview::
  126.  
  127. Button Concepts
  128.  
  129. * Explicit Buttons::
  130. * Global Buttons::
  131. * Implicit Buttons and Types::
  132. * Action Types and Actions::
  133. * Button and Type Precedences::
  134.  
  135. Using Hyperbole
  136.  
  137. * Initializing::
  138. * Smart Keys::
  139. * Window Configurations::
  140. * Operating Menus::
  141. * Entering Arguments::
  142. * Working with Explicit Buttons::
  143. * Outliner::
  144. * Rolodex::
  145.  
  146. Initializing
  147.  
  148. * Internal Viewers::
  149. * External Viewers::
  150. * Link Variable Substitution::
  151. * Button Colors::        Configuring Button Colors
  152. * Loading Hyperbole::
  153.  
  154. Working with Explicit Buttons
  155.  
  156. * Creation::
  157. * Renaming::
  158. * Deletion::
  159. * Modification::
  160. * Location::
  161. * Button Files::
  162. * Buttons in Mail::
  163. * Buttons in News::
  164.  
  165. Creation
  166.  
  167. * Drags::            via Smart Mouse Key Drags
  168. * Menus::            via Hyperbole Menus
  169.  
  170. Outliner Operation
  171.  
  172. * Outliner Menu::
  173. * Outliner History::
  174.  
  175. Rolodex Operation
  176.  
  177. * Rolo Concepts::
  178. * Rolo Menu::
  179. * Rolo Keys::
  180. * Rolo Settings::
  181.  
  182. Developing with Hyperbole
  183.  
  184. * Hook Variables::
  185. * Creating Types::
  186. * Explicit Button Technicalities::
  187. * Encapsulating Systems::
  188. * Embedding Hyperbole::
  189.  
  190. Creating Types
  191.  
  192. * Action Types::
  193. * Implicit Button Types::
  194.  
  195. Explicit Button Technicalities
  196.  
  197. * Button Label Normalization::
  198. * Operational and Storage Formats::
  199. * Programmatic Button Creation::
  200.  
  201. Smart Key Reference
  202.  
  203. * Smart Mouse Keys::
  204. * Smart Keyboard Keys::
  205.  
  206. 
  207. File: hyperbole.info,  Node: Introduction,  Next: Button Concepts,  Prev: Top,  Up: Top
  208.  
  209. Introduction
  210. ************
  211.  
  212.    This chapter describes what Hyperbole is, lists some of its potential
  213. applications, and then summarizes the structure of the rest of the
  214. manual.
  215.  
  216. * Menu:
  217.  
  218. * Hyperbole Overview::
  219. * Manual Overview::
  220.  
  221. 
  222. File: hyperbole.info,  Node: Hyperbole Overview,  Next: Manual Overview,  Prev: Introduction,  Up: Introduction
  223.  
  224. Hyperbole Overview
  225. ==================
  226.  
  227.    A Hyperbole user works with *buttons*; he may create, modify, move
  228. or delete buttons.  Each button performs a specific action, such as
  229. linking to a file or executing a shell command.
  230.  
  231.    There are three categories of Hyperbole buttons:
  232. "explicit buttons"
  233.      created by Hyperbole, accessible from within a single document;
  234.  
  235. "global buttons"
  236.      created by Hyperbole, accessible anywhere within a user's network
  237.      of documents;
  238.  
  239. "implicit buttons"
  240.      created and managed by other programs or embedded within the
  241.      structure of a document, accessible from within a single document.
  242.      Hyperbole recognizes implicit buttons by contextual patterns
  243.      given in their type specifications (explained later).
  244.  
  245.    Explicit Hyperbole buttons may be embedded within any type of text
  246. file.  Implicit buttons may be recognized anywhere within a text file,
  247. depending on the implicit button types that are available.  All global
  248. buttons are stored in a single location and activated by entering their
  249. names, rather than by direct selection, the means used to activate
  250. explicit and implicit buttons.
  251.  
  252. To summarize:
  253.  
  254.      Button Category   Active Within        Activation Means      Managed By
  255.      ========================================================================
  256.      Explicit          a single document    direct selection      Hyperbole
  257.      Global            any document         specifying its name   Hyperbole
  258.      Implicit          a matching context   direct selection      other tools
  259.      ========================================================================
  260.  
  261.    Hyperbole buttons may be clicked upon with a mouse to activate them
  262. or to describe their actions.  Thus, a user can always check how a
  263. button will act before activating it.  Buttons may also be activated
  264. from a keyboard.  (In fact, virtually all Hyperbole operations,
  265. including menu usage, may be performed from any standard character
  266. terminal interface, so one need not be anchored to a workstation all
  267. day).  *Note Smart Keys::.
  268.  
  269.    Hyperbole does not enforce any particular hypertext or information
  270. management model, but instead allows you to organize your information in
  271. large or small chunks as you see fit.  The Hyperbole outliner organizes
  272. information hierarchies which may also contain links to external
  273. information sources.
  274.  
  275.    Some of Hyperbole's most important features include:
  276.  
  277.    * Buttons may link to information or may execute procedures, such as
  278.      starting or communicating with external programs;
  279.  
  280.    * One simply drags between a button source location and a link
  281.      destination to create or to modify a link button.  The same result
  282.      can be achieved from the keyboard.
  283.  
  284.    * Buttons may be embedded within electronic mail messages;
  285.  
  286.    * Outlines allow rapid browsing, editing and movement of chunks of
  287.      information organized into trees (hierarchies);
  288.  
  289.    * Other hypertext and information retrieval systems may be
  290.      encapsulated under a Hyperbole user interface (a number of samples
  291.      are provided).
  292.  
  293. Typical Hyperbole applications include:
  294.  
  295. *personal information management*
  296.      Overlapping link paths provide a variety of views into an
  297.      information space.  A search facility locates buttons in context
  298.      and permits quick selection.
  299.  
  300. *documentation and code browsing*
  301.      Cross-references may be embedded within documentation.  One can
  302.      add a point-and-click interface to existing documentation, link
  303.      code with associated design documents, or jump to the definition
  304.      of an identifier by selecting its name within code or
  305.      documentation.
  306.  
  307. *brainstorming*
  308.      The Hyperbole outliner, *Note Outliner::, is an effective tool for
  309.      capturing ideas and then quickly reorganizing them in a meaningful
  310.      way.  Links to related ideas are easy to create, eliminating the
  311.      need to copy and paste information into a single place.
  312.  
  313. *help/training systems*
  314.      Tutorials containing buttons can show students how things work
  315.      while explaining the concepts, e.g. an introduction to local
  316.      commands.  This technique can be much more effective than written
  317.      documentation alone.
  318.  
  319. *archive managers*
  320.      Programs that manage archives from incoming information streams
  321.      may be supplemented by having them add topic-based buttons that
  322.      link to the archive holdings.  Users can then search and create
  323.      their own links to archive entries.
  324.  
  325. 
  326. File: hyperbole.info,  Node: Manual Overview,  Prev: Hyperbole Overview,  Up: Introduction
  327.  
  328. Manual Overview
  329. ===============
  330.  
  331.    *Note Glossary::, provides definitions of Hyperbole terms for quick
  332. reference, so in some cases terms are not precisely defined within the
  333. text.  Be sure to reference the glossary if a term is unclear to you.
  334. Although you need not have a keen understanding of all of these terms, a
  335. quick scan of the Glossary should help throughout Hyperbole use.
  336.  
  337.    *Note Button Concepts::, and *Note Hyperbole Views::, lay a
  338. conceptual foundation needed before the material in *Note Using
  339. Hyperbole::, can be utilized.  *Note Smart Key Reference:: for
  340. reference documentation on the innovative, context-sensitive mouse and
  341. key handling offered by Hyperbole.  *Note Questions and Answers:: for
  342. responses to a number of frequent questions.
  343.  
  344.    Developers comfortable with Emacs Lisp will want to continue on
  345. through *Note Developing with Hyperbole::.
  346.  
  347.    *Note Ongoing Work:: describes future directions in Hyperbole's
  348. evolution.
  349.  
  350. 
  351. File: hyperbole.info,  Node: Button Concepts,  Next: Hyperbole Views,  Prev: Introduction,  Up: Top
  352.  
  353. Button Concepts
  354. ***************
  355.  
  356.    This chapter explains the user-level notion of Hyperbole buttons.
  357. You should read it before reading *Note Using Hyperbole::.
  358.  
  359.    Hyperbole buttons that are stored in files persist across Emacs
  360. sessions, so they provide a convenient means of linking from one
  361. information source to another.
  362.  
  363. * Menu:
  364.  
  365. * Explicit Buttons::
  366. * Global Buttons::
  367. * Implicit Buttons and Types::
  368. * Action Types and Actions::
  369. * Button and Type Precedences::
  370.  
  371. 
  372. File: hyperbole.info,  Node: Explicit Buttons,  Next: Global Buttons,  Prev: Button Concepts,  Up: Button Concepts
  373.  
  374. Explicit Buttons
  375. ================
  376.  
  377.    Hyperbole creates and manages *explicit buttons* which look like
  378. this `<(fake button)>' to a Hyperbole user.  They are quickly
  379. recognizable, yet relatively non-distracting as one scans the text in
  380. which they are embedded.  The text between the `<(' and `)>' delimiters
  381. is called the "button label".  Spacing between words within a button
  382. label is irrelevant to Hyperbole, so button labels may wrap across
  383. several lines without causing a problem.
  384.  
  385.    Hyperbole stores the "button data" that gives an explicit button its
  386. behavior, separately from the button label, in a file named `.hypb'
  387. within the same directory as the file in which the button is created.
  388. Thus, all files in the same directory share a common button data file.
  389. Button data is comprised of individual "button attribute" values.  A
  390. user never sees this data in its raw form but may see a formatted
  391. version by asking for help on a button.
  392.  
  393.    Explicit buttons may be freely moved about within the buffer in which
  394. they are created.  (No present support exists for moving buttons between
  395. buffers).  A single button may also appear multiple times within the
  396. same buffer; one simply copies the button label with its delimiters to
  397. a new location in such cases.
  398.  
  399.    Each explicit button is assigned an action type which determines the
  400. actions that it performs.  "Link action types" connect buttons to
  401. particular types of referents.  "Activation" of such buttons then
  402. displays the referents.
  403.  
  404.    Hyperbole does not manage referent data; this is left to the
  405. applications that generate the data.  This means that Hyperbole
  406. provides in-place linking and does not require reformatting of data to
  407. integrate it with a Hyperbole framework.
  408.  
  409. 
  410. File: hyperbole.info,  Node: Global Buttons,  Next: Implicit Buttons and Types,  Prev: Explicit Buttons,  Up: Button Concepts
  411.  
  412. Global Buttons
  413. ==============
  414.  
  415.    Access to explicit buttons depends upon the information on your
  416. screen since they are embedded within particular buffers.  Sometimes it
  417. is useful to activate buttons without regard to the information with
  418. which you are presently working.  In such instances, you use "global
  419. buttons", which are simply explicit buttons which may be activated or
  420. otherwise operated upon by entering their labels when they are prompted
  421. for, rather than selecting the buttons within a buffer.
  422.  
  423.    If you want a permanent link to a file section that you can follow at
  424. any time, you can use a global button.  Or what about an Emacs keyboard
  425. macro that you use frequently?  Create an `exec-kbd-macro' button with
  426. an easy to type name and then you can easily activate it whenever the
  427. need arises.
  428.  
  429. 
  430. File: hyperbole.info,  Node: Implicit Buttons and Types,  Next: Action Types and Actions,  Prev: Global Buttons,  Up: Button Concepts
  431.  
  432. Implicit Buttons and Types
  433. ==========================
  434.  
  435.    Implicit buttons are those defined by the natural structure of a
  436. document.  They are identified by contextual patterns which limit the
  437. locations or states in which they can appear.  Their behavior is
  438. determined by one or more actions which they trigger when activated.  An
  439. action is derived from either a Hyperbole action type specification,
  440. *note Action Types and Actions::., or an Emacs Lisp function.  Implicit
  441. button types may use the same action types that explicit buttons do.
  442.  
  443.    Implicit buttons never have any button data associated with them.
  444. They are recognized in context based on predicate matches defined within
  445. implicit button types.  For example, Hyperbole recognizes file names
  446. enclosed in double quotes and can quickly display their associated files
  447. in response to simple mouse clicks.
  448.  
  449. See `hibtypes.el' for complete examples.  Standard implicit button
  450. types include (in alphabetical order):
  451.  
  452. `annot-bib'
  453.      Displays annotated bibliography entries referenced internally,
  454.      delimeters = [].  References must be delimited by square brackets,
  455.      must begin with a word constituent character, and must not be in
  456.      buffers whose names begin with a ' ' or '*' character.
  457.  
  458. `completion'
  459.      Inserts completion at point into minibuffer or other window.
  460.  
  461. `dir-summary'
  462.      Detects filename buttons in files named "MANIFEST" or "DIR".
  463.      Displays selected files.  Each file name must be at the beginning
  464.      of the line and must be followed by one or more spaces and then
  465.      another non-space, non-parenthesis, non-brace character.
  466.  
  467. `doc-id'
  468.      Displays an index entry for a site-specific document given its id.
  469.      Ids must be delimited by 'doc-id-start' and 'doc-id-end' and must
  470.      match the function given by 'doc-id-p'.  This permits creation of
  471.      catalogued online libraries.  See `${hyperb:dir}/hib-doc-id.el'
  472.      for more information.
  473.  
  474. `elisp-compiler-msg'
  475.      Jumps to source code for definition associated with byte-compiler
  476.      error message.  Works when activated anywhere within an error line.
  477.  
  478. `debugger-source'
  479.      Jumps to source line associated with debugger stack frame or
  480.      breakpoint lines.  This works with gdb, dbx, and xdb.  Such lines
  481.      are recognized in any buffer.
  482.  
  483. `grep-msg'
  484.      Jumps to line associated with grep or compilation error msgs.
  485.      Messages are recognized in any buffer.
  486.  
  487. `hyp-address'
  488.      Turns a Hyperbole e-mail list address into an implicit button which
  489.      inserts Hyperbole environment information.  Useful when sending
  490.      mail to a Hyperbole mail list.  See also the documentation for
  491.      `actypes::hyp-config'.
  492.  
  493. `hyp-source'
  494.      Turns source location entries in Hyperbole reports into buttons
  495.      that jump to the associated location.
  496.  
  497. `Info-node'
  498.      Makes "(file)node" buttons display the associated Info node.
  499.  
  500. `kbd-key'
  501.      Executes a key sequence delimited by curly braces.  Key sequences
  502.      should be in human readable form, e.g. {`C-b'}.  Forms such as
  503.      {}, {}, and {^b} will not be recognized.
  504.  
  505. `klink'
  506.      Follows a link delimited by <> to a koutline cell.  See
  507.      documentation for `actypes::link-to-kotl' for valid link
  508.      specifiers.
  509.  
  510. `mail-address'
  511.      If on an e-mail address in a specific buffer type, mail to that
  512.      address in another window. Applies to the rolodex match buffer,
  513.      any buffer attached to a file in ROLO-FILE-LIST, or any buffer
  514.      with `mail' or `rolo' (case-insensitive) within its name.
  515.  
  516. `man-apropos'
  517. `UNIX manual'
  518. `man pages'
  519. `man apropos'
  520.      Makes man apropos entries display associated man pages when
  521.      selected.
  522.  
  523. `patch-msg'
  524.      Jumps to source code associated with output from the `patch'
  525.      program.  Patch applies diffs to source code.
  526.  
  527. `pathname'
  528.      Makes a delimited, valid pathname display the path entry.  Also
  529.      works for delimited and non-delimited ange-ftp and efs pathnames.
  530.      See `hpath:at-p' for possible delimiters.  See `hpath:find' for
  531.      special file display options.
  532.  
  533. `rfc'
  534.      Retrieves and displays an Internet rfc referenced at point.
  535.      Requires ange-ftp or efs when needed for remote retrievals.  The
  536.      following formats are recognized: RFC822, rfc-822, and RFC 822.
  537.      The HPATH:RFC variable specifies the location from which to
  538.      retrieve RFCs."
  539.  
  540. `rfc-toc'
  541.      Summarizes contents of an Internet rfc from anywhere within rfc
  542.      buffer.  Each line in summary may be selected to jump to section.
  543.  
  544.    The Hyperbole Smart Keys offer extensive additional context-sensitive
  545. point-and-click type behavior beyond these standard implicit button
  546. types.  *Note Smart Keys::.
  547.  
  548. 
  549. File: hyperbole.info,  Node: Action Types and Actions,  Next: Button and Type Precedences,  Prev: Implicit Buttons and Types,  Up: Button Concepts
  550.  
  551. Action Types and Actions
  552. ========================
  553.  
  554.    "Action types" provide action procedures that specify button
  555. behavior.  The arguments needed by an action type are prompted for at
  556. button creation time.  When a button is activated, the stored arguments
  557. are fed to the action type's "action" body to achieve the desired
  558. result.  Hyperbole handles all of this transparently.
  559.  
  560. Standard action types include:
  561.  
  562. `annot-bib'
  563.      Follows internal ref KEY within an annotated bibliography,
  564.      delimiters=[].
  565.  
  566. `completion'
  567.      Inserts completion at point into minibuffer or other window.
  568.      Unless at end of buffer or if completion has already been
  569.      inserted, then deletes completions window.
  570.  
  571. `eval-elisp'
  572.      Evaluates a Lisp expression LISP-EXPR.
  573.  
  574. `exec-kbd-macro'
  575.      Executes KBD-MACRO REPEAT-COUNT times.  KBD-MACRO may be a string
  576.      of editor command characters or a function symbol.  Optional
  577.      REPEAT-COUNT nil means execute once, zero means repeat until error.
  578.  
  579. `exec-shell-cmd'
  580.      Executes a SHELL-CMD string asynchronously.  Optional non-nil
  581.      second argument INTERNAL-CMD means do not display the shell
  582.      command line executed.  Optional non-nil third argument KILL-PREV
  583.      means kill last output to shell buffer before executing SHELL-CMD.
  584.  
  585. `exec-window-cmd'
  586.      Executes an external window-based SHELL-CMD string asynchronously.
  587.  
  588. `hyp-config'
  589.      Inserts Hyperbole configuration info at end of optional OUT-BUF or
  590.      current.
  591.  
  592. `hyp-request'
  593.      Inserts Hyperbole mail list request help into optional OUT-BUF or
  594.      current.
  595.  
  596. `hyp-source'
  597.      Displays a buffer or file from a line beginning with
  598.      'hbut:source-prefix'.
  599.  
  600. `kbd-key'
  601.      Executes the function binding for KEY-SEQUENCE, delimited by {}.
  602.      Returns t if a KEY-SEQUENCE has a binding, else nil.
  603.  
  604. `link-to-buffer-tmp'
  605.      Displays a BUFFER in another window.  Link is generally only good
  606.      for current Emacs session.  Use 'link-to-file' instead for a
  607.      permanent link.
  608.  
  609. `link-to-directory'
  610.      Displays a DIRECTORY in Dired mode in another window.
  611.  
  612. `link-to-doc'
  613.      Displays online version of a document given by DOC-ID, in other
  614.      window.  If the online version of a document is not found in
  615.      DOC-ID-INDICES, an error is signalled.
  616.  
  617. `link-to-ebut'
  618.      Performs action given by another button, specified by KEY and
  619.      KEY-FILE.
  620.  
  621. `link-to-elisp-doc'
  622.      Displays documentation for FUNC-SYMBOL.
  623.  
  624. `link-to-file'
  625.      Displays a PATH in another window scrolled to optional POINT.
  626.      With POINT, buffer is displayed with POINT at the top of the
  627.      window.
  628.  
  629. `link-to-file-line'
  630.      Displays a PATH in another window scrolled to LINE-NUM.
  631.  
  632. `link-to-kcell'
  633.      Displays FILE with kcell given by CELL-REF at the top of the
  634.      window.  CELL-REF may be a kcell's display label or its permanant
  635.      idstamp.  If FILE is nil, the current buffer is used.  If CELL-REF
  636.      is nil, the first cell in the view is shown.
  637.  
  638. `link-to-kotl'
  639.      Displays at the top of another window the referent pointed to by
  640.      LINK.  LINK may be of any of the following forms, with or without
  641.      delimiters:
  642.             < pathname [, cell-ref] >
  643.             < [-!&] pathname >
  644.             < @cell-ref >
  645.  
  646. `link-to-Info-node'
  647.      Displays an Info NODE in another window.  NODE must be a string of
  648.      the form '(file)nodename'.
  649.  
  650. `link-to-mail'
  651.      Displays mail msg with MAIL-MSG-ID from MAIL-FILE in other window.
  652.      See documentation for the variable HMAIL:INIT-FUNCTION for
  653.      information on how to specify a mail reader to use.
  654.  
  655. `link-to-regexp-match'
  656.      Finds REGEXP's Nth occurrence in FILE and displays location at
  657.      window top.  Returns t if found, signals an error if not.
  658.  
  659. `link-to-rfc'
  660.      Retrieves and displays an Internet rfc given by RFC-NUM.  RFC-NUM
  661.      may be a string or an integer.  Requires ange-ftp or efs for
  662.      remote retrievals.
  663.  
  664. `link-to-string-match'
  665.      Finds STRING's Nth occurrence in FILE and displays location at
  666.      window top.  Returns t if found, nil if not.
  667.  
  668. `man-show'
  669.      Displays man page on TOPIC, which may be of the form
  670.      `<command>(<section>').
  671.  
  672. `rfc-toc'
  673.      Computes and displays summary of an Internet rfc in BUF-NAME.
  674.      Assumes point has already been moved to start of region to
  675.      summarize.  Optional OPOINT is point to return to in BUF-NAME
  676.      after displaying summary.
  677.  
  678.    The use of action types provides a convenient way of specifying
  679. button behavior without the need to know how to program.  Expert users
  680. who are familiar with Emacs Lisp, however, may find that they often
  681. want to tailor button actions in a variety of ways not easily captured
  682. within a type system.  In such cases, HUI:EBUT-PROMPT-FOR-ACTION should
  683. be set non-nil.  This will cause Hyperbole to prompt for an action to
  684. override the button's action type at each explicit button creation.  For
  685. those cases where the action type is sufficient, a nil value should be
  686. entered for the action.  An action may be any Lisp form that may be
  687. evaluated.
  688.  
  689. 
  690. File: hyperbole.info,  Node: Button and Type Precedences,  Prev: Action Types and Actions,  Up: Button Concepts
  691.  
  692. Button and Type Precedences
  693. ===========================
  694.  
  695.    Explicit buttons always take precedence over implicit buttons.
  696. Thus, if a button selection is made which falls within both an explicit
  697. and implicit button, only the explicit button will be selected.
  698. Explicit button labels are not allowed to overlap; Hyperbole's behavior
  699. in such cases is undefined.
  700.  
  701.    If there is no explicit button at point during a selection request,
  702. then each implicit button type predicate is tested in turn until one
  703. returns non-nil or all are exhausted.  Since two implicit button types
  704. may have overlapping domains (those contexts in which their predicates
  705. are true), only the first matching type is used.  The type predicates
  706. are tested in *reverse* order of definition, i.e. most recently entered
  707. types are tested first, so that personal types defined after standard
  708. system types take precedence.  It is important to keep this order in
  709. mind when defining new implicit button types.  By making their match
  710. predicates as specific as possible, one can minimize any overlapping of
  711. implicit button type domains.
  712.  
  713.    Once a type name is defined, its precedence relative to other types
  714. remains the same even if you redefine the body of the type, as long as
  715. you don't change its name.  This allows incremental modifications to
  716. types without having to worry about shifts in type precedence.  *Note
  717. Creating Types::, for information on how to develop or modify types.
  718.  
  719. 
  720. File: hyperbole.info,  Node: Hyperbole Views,  Next: Using Hyperbole,  Prev: Button Concepts,  Up: Top
  721.  
  722. Hyperbole Views
  723. ***************
  724.  
  725.    This chapter explains the role of views in the display of information
  726. accessed via Hyperbole.  You should read it before reading *Note Using
  727. Hyperbole::.
  728.  
  729.    This release of Hyperbole does not contain *any* support for views.
  730. A general view model is in development.  The descriptions here are
  731. meant to familiarize you with the notion of views to be available in
  732. future releases.
  733.  
  734.    A "Hyperbole view" is a perspective on a pool of information.  An
  735. outline of a document, a document extract, and a decrypted document all
  736. represent views of an original document (which may just be a file).
  737.  
  738.    "View specifications" or view specs, for short, control the
  739. application of views to displayed information.  An action type which
  740. displays a buffer of text, the "result buffer", can apply a view spec
  741. to the buffer before display.  A user can then manipulate the view by
  742. interactively altering the view spec associated with the buffer.  A 'V'
  743. in an action type's interactive call string indicates that the view
  744. spec of any button which uses the action type should be applied to the
  745. result buffer of the action type.
  746.  
  747. 
  748. File: hyperbole.info,  Node: Using Hyperbole,  Next: Developing with Hyperbole,  Prev: Hyperbole Views,  Up: Top
  749.  
  750. Using Hyperbole
  751. ***************
  752.  
  753.    This chapter covers user interaction with Hyperbole.  Often a number
  754. of overlapping interaction methods are provided to support different
  755. work styles and hardware limitations.  You need learn only one with
  756. which you can become comfortable, in such instances.
  757.  
  758.    Remember that the `DEMO' file included in the Hyperbole distribution
  759. demonstrates many of Hyperbole's standard facilities, *Note Preface:
  760. Top, for more details.
  761.  
  762. * Menu:
  763.  
  764. * Initializing::
  765. * Smart Keys::
  766. * Window Configurations::
  767. * Operating Menus::
  768. * Entering Arguments::
  769. * Working with Explicit Buttons::
  770. * Outliner::
  771. * Rolodex::
  772.  
  773. 
  774. File: hyperbole.info,  Node: Initializing,  Next: Smart Keys,  Prev: Using Hyperbole,  Up: Using Hyperbole
  775.  
  776. Initializing
  777. ============
  778.  
  779.    Hyperbole must be installed at your site before you can use it.  The
  780. `README' file that comes with the Hyperbole distribution explains how
  781. to install it and how to join the Hyperbole interest mail lists.  See
  782. the Msg/ menu item in *Note Operating Menus::, for a convenient means
  783. of joining and mailing to these lists.
  784.  
  785.    If you are installing Hyperbole at your site, please read the
  786. `README' file before continuing in this document.
  787.  
  788.    If you want to customize the basic Hyperbole initialization sequence
  789. for yourself rather than the users at your site, you should make a
  790. personal copy of the `hsite.el' file, modify it the way you want, and
  791. then load it.  (If you are familiar with Emacs Lisp, see also *Note
  792. Hook Variables::.)
  793.  
  794. * Menu:
  795.  
  796. * Internal Viewers::
  797. * External Viewers::
  798. * Link Variable Substitution::
  799. * Button Colors::        Configuring Button Colors
  800. * Loading Hyperbole::
  801.  
  802. 
  803. File: hyperbole.info,  Node: Internal Viewers,  Next: External Viewers,  Prev: Initializing,  Up: Initializing
  804.  
  805. Internal Viewers
  806. ----------------
  807.  
  808.    When given a file name, Hyperbole will by default display the file
  809. for editing within an Emacs buffer.  The HPATH:DISPLAY-ALIST variable
  810. can be used to specify file name patterns, such as matching suffixes,
  811. which will invoke a special Emacs Lisp function to display any matching
  812. files within Emacs.  This can be used to format raw data files for
  813. convenient display.
  814.  
  815.    Configure the HPATH:DISPLAY-ALIST variable in `hsite.el'.  Its value
  816. is an association list whose elements are
  817. (<file-name-regular-expression> . <function-of-one-arg>) pairs.  Any
  818. path whose name matches a <file-name-regular-expression> will be
  819. displayed by calling the associated <function-of-one-arg> with the file
  820. name as the argument.
  821.  
  822.    *Note External Viewers::, for instructions on associating file names
  823. with external, window-system specific viewers.
  824.  
  825. 
  826. File: hyperbole.info,  Node: External Viewers,  Next: Link Variable Substitution,  Prev: Internal Viewers,  Up: Initializing
  827.  
  828. External Viewers
  829. ----------------
  830.  
  831.    If you will be using Hyperbole under a window system, you may want to
  832. configure the HPATH:FIND-ALIST variable in `hsite.el' to support
  833. hyperlinks which open files using non-Emacs tools, e.g. a fax reader or
  834. a bitmap viewer.
  835.  
  836.    The value of HPATH:FIND-ALIST is determined when Hyperbole is
  837. initialized based upon the current window system and the version of
  838. Emacs in use.  The value is an association list whose elements are
  839. (<file-name-regular-expression> . <viewer-program>) pairs.  Any path
  840. whose name matches a <file-name-regular-expression> will be displayed
  841. using the corresponding viewer-program.  If a <viewer-program> entry
  842. contains a `%s' string, the filename to display will be substituted at
  843. that point within the string.  Otherwise, the filename will be appended
  844. to the <viewer-program> entry.  See the "x-suffixes" and
  845. "nextstep-suffixes" settings within the definition of HPATH:FIND-ALIST
  846. as examples.
  847.  
  848. 
  849. File: hyperbole.info,  Node: Link Variable Substitution,  Next: Button Colors,  Prev: External Viewers,  Up: Initializing
  850.  
  851. Link Variable Substitution
  852. --------------------------
  853.  
  854.    Another variable to consider modifying in the `hsite.el' file is
  855. HPATH:VARIABLES.   This variable consists of a list of Emacs Lisp
  856. variable names, each of which may have a pathname or a list of pathnames
  857. as a value.  Whenever a Hyperbole file or directory link button is
  858. created, its pathname is compared against the values in
  859. HPATH:VARIABLES.  The first match found, if any, is selected and its
  860. associated variable name is substituted into the link pathname, in
  861. place of its literal value.  When the link is resolved (the button is
  862. activated), Hyperbole replaces each variable with the first matching
  863. value from this list.  (Environment variables are also replaced whenever
  864. link paths are resolved.
  865.  
  866.    This permits sharing of links over wide areas, where the variable
  867. values may differ between link creator and link activator.  The entire
  868. process is wholly transparent to the user; it is explained here simply
  869. to help you in deciding whether or not to modify the value of
  870. HPATH:VARIABLES.
  871.  
  872. 
  873. File: hyperbole.info,  Node: Button Colors,  Next: Loading Hyperbole,  Prev: Link Variable Substitution,  Up: Initializing
  874.  
  875. Configuring Button Colors
  876. -------------------------
  877.  
  878.    When Hyperbole is run under a window system together with Emacs 19,
  879. XEmacs or Epoch, it can automatically highlight any explicit buttons in
  880. a buffer and make them flash when selected.  The only configuration
  881. necessary is selection of a color (or style) for button highlighting and
  882. button flashing.  See the `hui-*-b*.el' files for lists of potential
  883. colors and the code which supports this behavior.  A call to
  884. `(hproperty:cycle-but-color)' within a Hyperbole initialization
  885. sequence changes the color used to highlight and flash explicit buttons.
  886.  
  887.    Additionally, under XEmacs, if HPROPERTY:BUT-EMPHASIZE-P is set to
  888. `t' in `hsite.el', then whenever the mouse pointer moves over an
  889. explicit button, it will be emphasized in a different color or style.
  890. This emphasis is in addition to any non-mouse-sensitive button
  891. highlighting.
  892.  
  893. 
  894. File: hyperbole.info,  Node: Loading Hyperbole,  Prev: Button Colors,  Up: Initializing
  895.  
  896. Loading Hyperbole
  897. -----------------
  898.  
  899.    Each time you start a new Emacs session, the Hyperbole code must be
  900. loaded for you to use it.  The easiest way to achieve this is to add two
  901. lines to your `~/.emacs' file, which Emacs reads automatically on
  902. startup.  The lines should be:
  903.          (load "<HYP-DIR>/hversion")
  904.          (load "<HYP-DIR>/hyperbole")
  905.    where the local Hyperbole installation directory is substituted for
  906. `<HYP-DIR>'.  This establishes a few key bindings and sets up Hyperbole
  907. to automatically load whenever you activate its menu.  If you would
  908. rather have the whole Hyperbole system loaded when you start up so that
  909. you can always use the Smart Keys and other facilities, add a third
  910. line after the above two lines.
  911.          (require 'hsite)
  912.  
  913.    If you use mouse keys, be sure to add the above lines after any
  914. setup of mouse key bindings, to ensure that Hyperbole's mouse keys are
  915. initialized.  *Note Smart Keys::, for further details.  If you use any
  916. Hyperbole mail or news support, *note Buttons in Mail::., be certain to
  917. perform all of your personal mail/news initializations before the point
  918. at which you load Hyperbole.  Otherwise, the mail/news support may not
  919. be configured properly.  For example, if you use the Emacs add-on
  920. Supercite package, its setup should come before Hyperbole
  921. initialization.
  922.  
  923. 
  924. File: hyperbole.info,  Node: Smart Keys,  Next: Window Configurations,  Prev: Initializing,  Up: Using Hyperbole
  925.  
  926. Smart Keys
  927. ==========
  928.  
  929.    Hyperbole provides two special "Smart Keys" that perform
  930. context-sensitive operations, the Action Key and the Assist Key.  By
  931. default, the "Action Key" is bound to your shift-middle mouse button (or
  932. shift-left on a 2-button mouse) and the "Assist Key" is bound to your
  933. shift-right mouse button, assuming Hyperbole is run under an external
  934. window system.  (InfoDock users should use the middle mouse button as
  935. the Action Key, instead.)
  936.  
  937.    Mouse configuration is automatic for XEmacs and Epoch under the X
  938. window system and for GNU Emacs versions 18 and 19 under X, OpenWindows,
  939. NEXTSTEP, SunView and Apollo's Display Manager, assuming your Emacs
  940. program has been built with support for any of these window systems.
  941.  
  942.    By default (if HKEY-INIT is left with a setting of `t' in
  943. `hsite.el'), then {`M-RET'} may also be used as the Action Key and
  944. {`C-u M-RET'} may be used as the Assist Key.  In many read-only modes
  945. like Dired and Rmail, {RTN} also functions as the Action Key.  These
  946. key bindings allow context sensitive operation from any keyboard.
  947.  
  948.    If you prefer other key bindings, simply bind the commands
  949. `action-key' and `assist-key' to keyboard keys.  `hkey-either' may be
  950. used instead if you prefer a single key binding for both commands; a
  951. prefix argument then invokes `assist-key'.
  952.  
  953.    You may also bind `action-mouse-key' and `assist-mouse-key' to mouse
  954. keys, as you like.
  955.  
  956.    The Action Key generally selects entities, creates links and
  957. activates buttons.  The Assist Key generally provides help, such as
  958. reporting on a button's attributes, or serves a complementary function
  959. to whatever the Action Key does within a context.
  960.  
  961.    You can get a summary of what the Smart Keys do in all of their
  962. different contexts by pressing the Assist Key in the right corner
  963. (within the rightmost 3 characters) of a window modeline or by using
  964. the Hyperbole Doc/SmartKy menu entry.
  965.  
  966.    The following table is an example of this summary.  Much of the
  967. browsing power of Hyperbole comes from use of the Smart Keys, so you
  968. should spend some time practicing how to use them.  This table may
  969. appear daunting at first, but as you practice and notice that the Smart
  970. Keys do just a few context-sensitive things per editor mode, you will
  971. find it easy to just point and click and let Hyperbole do the rest.
  972.  
  973.    For extensive reference documentation on the Smart Keys, *note Smart
  974. Key Reference::..
  975.  
  976. ==============================================================================
  977.                                              Smart Keys
  978. Context                         Action Key                 Assist Key
  979. ==============================================================================
  980. Hyperbole
  981.   On a menu item                Item is activated          Item help
  982.   On an explicit button         Button is activated        Button help
  983.   Reading argument
  984.     1st press at an arg value   Value copied to minibuffer <- same
  985.     2nd press at an arg value   Value used as argument     <- same
  986.     In minibuffer               Minibuf arg is applied     Completion help
  987.   On an implicit button         Button is activated        Button help
  988.   Within an outline cell        Collapses and expands      Shows tree props
  989.   Left of an outline cell       Creates a klink            Moves a tree
  990.   Wrolo Match Buffer            Edits entries and mails to e-mail addresses
  991.  
  992. Mouse or Keyboard Display Control
  993.   Line end, not end of buffer
  994.     smart-scroll-proportional
  995.       = nil (default)           Scrolls up a windowful     Scrolls down
  996.       = t                       Makes curr line top line   Bottom line
  997.   End of Any Help buffer        Screen restored to previous state
  998.  
  999. Mouse-only Control
  1000.   Modeline down & wind release  Resize window height       <- same
  1001.   Drag from shared window side
  1002.     or from left of scroll bar  Resize window width        <- same
  1003.   Drag between windows          Create/modify a link but   Swap window buffers
  1004.   Horizontal drag within window
  1005.     Left to right               Scroll to buffer end       Split window across
  1006.     Right to left               Scroll to buffer begin     Delete window
  1007.   Vertical drag within window   Split window sideways      <- same
  1008.   Diagonal drag within window   Save ring screen-config    Restore ring config
  1009.   Click in modeline
  1010.     Left window edge            Bury buffer                Unbury bottom buf
  1011.     Right window edge           Info                       Smart Key summary
  1012.     Otherwise                   Action Key Hook            Assist Key Hook
  1013.  
  1014. Special Modes
  1015.   C/C++ Mode                    Jumps to id/include def    Jumps to next def
  1016.   Assembly Language Mode        Jumps to id/include def    Jumps to next def
  1017.   Any Lisp mode                 Jumps to id def            Jumps to next def
  1018.   Emacs Lisp Compiler Error     Jumps to def with error    <- same
  1019.   Grep or Occur match           Jumps to match source line <- same
  1020.   Multi-buffer occur match      Jumps to match source line <- same
  1021.   Outline Major/Minor Modes     Collapses, expands, and moves outline entries
  1022.   Man Apropos                   Displays man page entry    <- same
  1023.   Man Pages                     Follows cross refs, file refs and C code refs
  1024.   Buffer Menu                   Saves, deletes and displays buffers
  1025.  
  1026. Emacs Info Reader
  1027.   Menu Entry or Cross Ref       Jumps to referent          <- same
  1028.   Up, Next or Prev Header       Jumps to referent          Jumps to prior node
  1029.   File entry of Header          Jumps to top node          Jumps to (DIR) node
  1030.   End of current node           Jumps to next node         Jumps to prev node
  1031.   Anywhere else                 Scrolls up a windowful     Scrolls down a wind
  1032.  
  1033. Subsystems
  1034.   Calendar                      Scrolls or shows appts     Scrolls/marks dates
  1035.   Dired Mode                    Views and deletes files from directory listing
  1036.   GNUS News Reader              Toggles group subscriptions, gets new news,
  1037.                                   and browses articles
  1038.   Mail reader and Summaries     Browses, deletes and expunges messages
  1039.   OO-Browser                    Browses classes and elements
  1040.   Tar Mode                      Views and edits files from tar archive files
  1041.  
  1042. Any other context (defaults)    Hyperbole top menu         Smart Key summary
  1043. ==============================================================================
  1044.  
  1045.    Note how the last line in the table explains the default behavior of
  1046. the Smart Keys.  That is what they do when they cannot find a context
  1047. match at your current location.  See the documentation for the variables
  1048. ACTION-KEY-DEFAULT-FUNCTION and ASSIST-KEY-DEFAULT-FUNCTION for
  1049. information on how to customize the behavior of the Smart Keys within
  1050. default contexts.
  1051.  
  1052.    A prime design criterion of Hyperbole's user interface is that one
  1053. should be able to see what an operation will do before using it.  The
  1054. Assist Key provides help for button and menu item actions.  Hyperbole
  1055. also shows the result of directly selecting an argument value, to
  1056. provide feedback as to whether the right item has been selected.
  1057.  
  1058.    When you use a mouse and you want to find out what either of the
  1059. Smart Keys does within a context, depress the one you want to check on
  1060. and hold it down, then press the other and release as you please.  A
  1061. help buffer will pop up explaining the actions that will be performed
  1062. in that context, if any.  A press of either Smart Key at the end of that
  1063. help buffer will restore your display to its configuration prior to
  1064. invoking help.
  1065.  
  1066.    By default (if HKEY-INIT is left set equal to `t' in `hsite.el'),
  1067. then {`C-h A'} will display this same context-sensitive help for the
  1068. Action Key while {`C-u C-h A'} will display the help for the Assist
  1069. Key.  Note that {`C-h a'} will perform a function unrelated to
  1070. Hyperbole, so you must press the shift key when you hit the `A'
  1071. character.
  1072.  
  1073.    When Hyperbole is installed, a key may be bound which allows you to
  1074. switch between the Smart Key mouse bindings and your prior ones.  `C-h
  1075. w hmouse-toggle-bindings RTN' should show you any key which performs
  1076. this command.  If no key binding has been established or if you prefer
  1077. one of your own, simply select a key and bind it within your `~/.emacs'
  1078. file.  For example, `(global-set-key "\C-ct" 'hmouse-toggle-bindings)'.
  1079.  
  1080. 
  1081. File: hyperbole.info,  Node: Window Configurations,  Next: Operating Menus,  Prev: Smart Keys,  Up: Using Hyperbole
  1082.  
  1083. Window Configurations
  1084. =====================
  1085.  
  1086.    Hyperbole includes the `wconfig.el' package which lets you save and
  1087. restore window configurations, i.e. the window layout and buffers
  1088. displayed within an Emacs frame.  This is useful to save a particular
  1089. working context and then to jump back to it at a later time during an
  1090. Emacs session.  It is also useful during demonstrations to pull up many
  1091. informational artifacts all at once, e.g. all of the windows for a
  1092. particular subsystem.  None of this information is stored between Emacs
  1093. sessions, so your window configurations will last only through a single
  1094. session of use.
  1095.  
  1096.    The wconfig library provides two distinct means of managing window
  1097. configurations.  The first means associates a name with each stored
  1098. window configuration.  The name can then be used to retrieve the window
  1099. configuration later.  The second means uses a ring structure to save
  1100. window configurations and then allows browsing through the sequence of
  1101. saved configurations.
  1102.  
  1103.    The Win/ menu entry on the Hyperbole top-level menu displays a menu
  1104. of window configuration commands:
  1105.  
  1106.      WinConfig>  AddName  DeleteName  RestoreName  PopRing  SaveRing  YankRing
  1107.  
  1108.      Menu Item       Command                   Description
  1109.      ====================================================================
  1110.      AddName         wconfig-add-by-name       Name current wconfig
  1111.      DeleteName      wconfig-delete-by-name    Delete wconfig with name
  1112.      RestoreName     wconfig-restore-by-name   Restore wconfig by name
  1113.      
  1114.      PopRing         wconfig-delete-pop        Restore and delete wconfig
  1115.      SaveRing        wconfig-ring-save         Store wconfig to ring
  1116.      YankRing        wconfig-yank-pop          Restore next wconfig
  1117.      ====================================================================
  1118.  
  1119.    Saving and restoring window configurations by name is the easiest
  1120. method, but it requires that you input the chosen name from the
  1121. keyboard.  The ring commands permit saving and restoring through mouse
  1122. interaction only, if so desired.  The prior section, *note Smart
  1123. Keys::., mentions how to save and restore window configurations with
  1124. the Smart Keys.  Since the ring commands are a bit more complex than
  1125. their by-name counterparts, the following paragraphs explain them in
  1126. more detail.
  1127.  
  1128.    Wconfig creates a ring structure that operates just like the Emacs
  1129. KILL-RING, *note Kill Ring: (emacs)Kill Ring., but its elements are
  1130. window configurations rather than text regions.  One can add an element
  1131. to the ring based upon the current window configuration.  After several
  1132. elements are in the ring, one can walk through all of them in sequence
  1133. until the desired configuration is restored.
  1134.  
  1135.    SaveRing executes the `wconfig-ring-save' command which saves the
  1136. current window configuration to the ring.
  1137.  
  1138.    YankRing executes the `wconfig-yank-pop' command.  It restores the
  1139. window configuration from the currently pointed to configuration in the
  1140. ring.  It does not delete this configuration from the ring but it does
  1141. move the pointer to the prior ring element.  Repeated calls to this
  1142. command thus restore successive window configurations until the ring
  1143. pointer wraps around.  Simply stop when a desired configuration appears.
  1144.  
  1145.    PopRing calls the `wconfig-delete-pop' command.  It is used to
  1146. restore a previously saved configuration and at the same time delete it
  1147. from the ring.
  1148.  
  1149.    The maximum number of elements the ring can hold is set by the
  1150. WCONFIG-RING-MAX variable whose default is 10.  Any saves beyond this
  1151. value cause deletion of the oldest element in the ring before a new one
  1152. is added.
  1153.  
  1154.